#!/bin/bash

# 脚本的错误处理
set -e

# 定义一些变量
HELM_REPO_NAME="bitnami"
HELM_REPO="https://charts.bitnami.com/bitnami"
MYSQL_RELEASE_NAME="architecture-station-mysql"
MYSQL_ROOT_PASSWORD="root"
MYSQL_PVC_STORAGE_SIZE="1Gi"
STORAGE_CLASS_NAME="standard"
CONFIGMAP_NAME="mysql-initdb-configmap"
SQL_DIR_PATH="../conf/sql"
NAMESPACE="architecture-station"
PV_NAME="architecture-station-pv"
PVC_NAME="architecture-station-pvc"
HOST_PATH_DIR="/Users/wuxiaoyong/Downloads/WorkSpace/architecture-station-cloud/data/k8s-volumn/$PV_NAME"

# 检查 Helm 是否已安装
if ! command -v helm &> /dev/null
then
    echo "Helm 未安装。请先安装 Helm。"
    exit 1
fi

# 检查 MySQL 是否已运行
if helm status $MYSQL_RELEASE_NAME -n $NAMESPACE &> /dev/null; then
  # helm uninstall architecture-station-mysql --namespace architecture-station
    echo "MySQL 已经在命名空间 $NAMESPACE 中运行。"
    exit 0
fi

# 添加 Helm 仓库
if helm repo list | grep -q "^$HELM_REPO_NAME"; then
  echo "Helm 仓库 $HELM_REPO_NAME 已经存在，跳过添加。"
else
  echo "添加 Helm 仓库 $HELM_REPO_NAME。"
  helm repo add $HELM_REPO_NAME $HELM_REPO
#  helm repo update
fi

# 创建命名空间（如果不存在）
kubectl get namespace $NAMESPACE &> /dev/null || kubectl create namespace $NAMESPACE

# 创建 PersistentVolume （如果不存在）
if ! kubectl get pv $PV_NAME &> /dev/null; then
    kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolume
metadata:
  name: $PV_NAME
spec:
  capacity:
    storage: $MYSQL_PVC_STORAGE_SIZE
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: $STORAGE_CLASS_NAME
  hostPath:
    path: "$HOST_PATH_DIR"
EOF
fi

# 创建 PersistentVolumeClaim （如果不存在）
if ! kubectl get pvc $PVC_NAME -n $NAMESPACE &> /dev/null; then
    kubectl apply -n $NAMESPACE -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: $PVC_NAME
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: $STORAGE_CLASS_NAME
  resources:
    requests:
      storage: $MYSQL_PVC_STORAGE_SIZE
EOF
fi

# 创建 ConfigMap 用于初始化脚本
if [ ! -d "$SQL_DIR_PATH" ]; then
    echo "SQL 目录 $SQL_DIR_PATH 不存在。"
    exit 1
fi

CONFIGMAP_YAML=$(cat <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: $CONFIGMAP_NAME
data:
EOF
)

for file in $SQL_DIR_PATH/*.sql; do
    FILENAME=$(basename "$file")
    CONFIGMAP_YAML+=$(cat <<EOF

  $FILENAME: |
$(sed 's/^/    /' "$file")
EOF
    )
done

echo "$CONFIGMAP_YAML" | kubectl apply -n $NAMESPACE -f -

# 使用 Helm 部署 MySQL
helm install $MYSQL_RELEASE_NAME $HELM_REPO_NAME/mysql \
  --namespace $NAMESPACE \
  --set auth.rootPassword=$MYSQL_ROOT_PASSWORD \
  --set primary.persistence.enabled=true \
  --set primary.persistence.existingClaim=$PVC_NAME \
  --set volumePermissions.enabled=true \
  --set volumePermissions.resourcesPreset=medium \
  --set initdbScriptsConfigMap=$CONFIGMAP_NAME \
  --set primary.resources.requests.memory=512Mi \
  --set primary.resources.requests.cpu=500m \
  --set primary.resources.limits.memory=1Gi \
  --set primary.resources.limits.cpu=1 \
  --set primary.resourcesPreset=medium \
  --set secondary.resources.requests.memory=512Mi \
  --set secondary.resources.requests.cpu=500m \
  --set secondary.resources.limits.memory=1Gi \
  --set secondary.resources.limits.cpu=1 \
  --set secondary.resourcesPreset=medium

echo "MySQL 部署成功在命名空间 $NAMESPACE 中。"
